#ifndef __CTRL_H
#define __CTRL_H

#include <stdint.h>
#include "dht11.h"
#include "menu.h"
#include <stdbool.h>

#define ctrl_on false
#define ctrl_off true

#define HYSTERESIS 0.5 // 滞后阈值

/*
 * 低电平->关闭机器
 * 高电平->开启机器
 */

/*  CTRL结构体
    @param GPIO_PORT            控制输出口
    @param GPIO_PORT            控制反馈口
    @param GPIO_PIN             控制输出引脚
    @param GPIO_PIN             控制反馈引脚
    @param DEVICE_CTRL          控制设备标志
    @param DEVICE_STATE         读取设备状态
    @param DEVICE_RESTART       设备复位标志
    @param CTRL_PIN_VALUIE      环境状态（1正常，0不正常）
 */
struct freertos_ctrl_stru
{
    GPIO_TypeDef *ctrl_pin_port;
    GPIO_TypeDef *lag_pin_port;
    uint16_t ctrl_pin;
    uint16_t lag_pin;
    uint8_t device_ctrl;    /* 控制设备标志 */
    uint8_t device_state;   /* 读取设备状态 */
    uint8_t device_restart; /* 设备复位标志 */
    bool env_state;         /* 环境状态 */
};

/*  CTRL结构体
    @param GPIO_PORT            控制输出口
    @param GPIO_PORT            控制反馈口
    @param GPIO_PIN             控制输出引脚
    @param GPIO_PIN             控制反馈引脚
    @param DEVICE_CTRL          控制设备标志
    @param DEVICE_STATE         读取设备状态
    @param DEVICE_RESTART       设备复位标志
    @param CTRL_PIN_VALUIE      环境状态（1正常，0不正常）
 */
typedef struct freertos_ctrl_stru ctrl_t;

void ctrl_init(ctrl_t *ctrl);
void ctrl_proc(ctrl_t *ctrl, dht_t *dht_data, struct menu_threshold *threshold);

#endif
